package org.jeecg.modules.xj.h5.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.modules.system.entity.SysUser;
import org.jeecg.modules.system.mapper.SysUserDepartMapper;
import org.jeecg.modules.system.mapper.SysUserTenantMapper;
import org.jeecg.modules.xj.points.entity.XjPoints;
import org.jeecg.modules.xj.points.service.IXjPointsService;
import org.jeecg.modules.xj.qrcode.entity.XjQrCode;
import org.jeecg.modules.xj.qrcode.service.IXjQrCodeService;
import org.jeecg.modules.xj.utils.QRcodeUtil;
import org.jeecg.modules.xj.utils.QrcodeUtils;
import org.jeecg.modules.xj.villager.service.VillagerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import java.util.List;
import java.util.Map;

/**
* @Description: 积分
* @Author: jeecg-boot
* @Date:   2023-08-11
* @Version: V1.0
*/
@Api(tags="村民信息")
@RestController
@RequestMapping("/h5/villager")
@Slf4j
public class UserController extends JeecgController<XjPoints, IXjPointsService> {
   @Autowired
   private IXjPointsService xjPointsService;
   @Autowired
   private VillagerService villagerService;
   @Autowired
   private IXjQrCodeService xjQrCodeService;
   @Autowired
   private SysUserDepartMapper sysUserDepartMapper;
   @Autowired
   private SysUserTenantMapper userTenantMapper;

   @GetMapping("getUserIdMessage")
   public Result<Map<String, Object>> getUserIdMessage(@RequestParam(name = "checkId") String checkId, HttpServletResponse response) throws Exception {
      Map<String, Object> map = xjPointsService.getUserVillagerById(checkId);
      return Result.OK(map);
   }



   /**
    * Vcard名片格式
    * 说明: Vcard内容必须以BEGIN:VCARD开头, 以END:VCARD结尾
    * 浏览器直接访问地址: http://localhost:8080/qrcode/vcard
    * @return
    */
   @RequestMapping(value="/vcard")
   public String vcard() {
      // 名片内容
      StringBuffer buffer = new StringBuffer();
      buffer.append("BEGIN:VCARD");
      buffer.append("\nFN:").append("AAAA"); //vcard对象的名称，一个vcard对象必须包含FN类型
      buffer.append("\nNICKNAME:").append("无"); //表示别名
      buffer.append("\nPHOTO:").append("无"); // 头像地址
      buffer.append("\nBDAY:").append("无"); // 出生日期

      // 联系地址有不同的类型,添加自己需要的即可
      /**
       "dom" 国内地址
       "intl" 国际地址
       "parcel"包裹递送地址
       "home" 居住地址;
       "work"工作地址;
       "pref" 有多个地址的时候，优先的地址
       */
      buffer.append("\nADR;TYPE=pref:").append("无");

      // LABEL
      /**
       "dom" 国内地址
       "intl" 国际地址
       "parcel"包裹递送地址
       "home" 居住地址;
       "work"工作地址;
       "pref" 有多个地址的时候，优先的地址
       */
      buffer.append("\nLABEL;TYPE=pref:").append("无");

      // 电话
      /**
       "home"表示家庭电话
       "msg" 表示这个号码支持语音
       "work" 工作电话
       "pref" 表示多个电话中最喜欢使用的电话
       "voice" 声音电话号码
       "fax"传真号码
       "cell" 表示手机电话
       "video" 视频电话
       "pager" 调度电话，估计是总机的电话
       "bbs" 公开的广播系统的电话
       "modem" 调制解调器电话
       "car"汽车电话
       "isdn" ISDN连接电话号码
       "pcs" 个人通信服务电话
       */
      buffer.append("\nTEL;TYPE=work:").append("13699998888");

      // 邮件
      /**
       "internet" 表示一个internet 类型地址
       "x400" 表示是一个 X.400 地址
       "pref"最喜欢使用的邮件电子
       */
      buffer.append("\nEMAIL;TYPE=pref:").append("777777777@qq.com");
      buffer.append("\nGEO:").append("无"); //地理位置信息,经度;纬度
      buffer.append("\nTITLE:").append("无"); //工作位置，工作职能
      buffer.append("\nROLE:").append("无"); //公司的职业
      buffer.append("\nUID:").append("无"); //指定一个全球唯一的个人或资源标识
      buffer.append("\nVERSION:").append("无"); //指定Vcard使用的vcard规范的版本
      buffer.append("\nORG:").append("无");
      buffer.append("END:VCARD");

      // 生成二维码
      qrcode(buffer.toString(), new File("E:\\jeecg-backup\\vcardlogo.jpg"), "vcard");

      return buffer.toString();
   }



   // 生成二维码
   public static void qrcode(String content, File logFile, String type) {
      int width = 200; // 图像宽度
      int height = 200; // 图像高度
      String format = "jpeg";// 图像类型
      Path qrcodePath = new File("E:\\jeecg-backup\\"+type+"."+format).toPath(); //生成图片存放地址
      // 二维码原图片
      try {
         BitMatrix qrcodeBitMatrix = QrcodeUtils.qrcodeMasterMap(content, width, height, format, qrcodePath);

         // 根据二维码原图片生成带logo的二维码
         QrcodeUtils.logoQrcode(qrcodeBitMatrix, format, logFile, new File("E:\\jeecg-backup\\"+type+"logo."+format));
      } catch (WriterException e) {
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
      }
   }

}
